package com.msblearn.C_001;

/**
 * 线程的三种状态：
 * sleep:让线程睡眠一会，时间结束后自动唤醒
 * yield：让线程让出一下，其他线程有可能抢到该线程的资源去运行。也可能抢不到。
 * join: 在线程中进入某个线程。
 *
 * 不要尝试去关闭线程：关闭线程容易造成线程的状态不一致。
 */
public class T03_SleepYieldJoin {

    static void testSleep() {
        new Thread(() -> {
            for (int i = 0; i < 10; i++) {
                System.out.println("sleep:" + i);
                try {
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

    static void testYield(){
        new Thread(()->{
            for(int i=0;i<100;i++){
                System.out.println("yield A: "+i);
                if(i%10==0) Thread.yield();
            }
        }).start();
        new Thread(()->{
            for(int i=0;i<100;i++){
                System.out.println("yield B: "+i);
                if(i%10==0) Thread.yield();
            }
        }).start();
    }

    static void testJoin(){
      Thread t1 =  new Thread(()->{

            for(int i=0;i<100;i++){
                System.out.println("Join A:"+i);
                try {
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        Thread t2 =   new Thread(()->{
            try {
                t1.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            for(int i=0;i<100;i++){
                System.out.println("Join B:"+i);
                try {
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        t1.start();
        t2.start();
    }

    public static void main(String[] args) {
//        testSleep();
//        testYield();
        testJoin();
    }
}
